package com.ruoyi.pos.service.device;

import com.ruoyi.pos.domain.device.PosDevice;
import com.ruoyi.pos.domain.dto.device.request.DeviceAutoRegisterRequest;
import com.ruoyi.pos.domain.dto.device.request.DeviceDebugCommandRequest;
import com.ruoyi.pos.domain.dto.device.response.DeviceAutoRegisterResponse;
import com.ruoyi.pos.domain.dto.device.response.DeviceDebugLogResponse;

import java.util.List;

/**
 * POS设备Service接口
 * 
 * @author ruoyi
 * @date 2025-01-30
 */
public interface IPosDeviceService {

    /**
     * 查询POS设备
     * 
     * @param deviceId POS设备主键
     * @return POS设备
     */
    public PosDevice selectPosDeviceByDeviceId(Long deviceId);

    /**
     * 根据设备编码查询设备
     * 
     * @param deviceCode 设备编码
     * @return POS设备
     */
    public PosDevice selectPosDeviceByCode(String deviceCode);

    /**
     * 查询POS设备列表
     * 
     * @param posDevice POS设备
     * @return POS设备集合
     */
    public List<PosDevice> selectPosDeviceList(PosDevice posDevice);

    /**
     * 新增POS设备
     * 
     * @param posDevice POS设备
     * @return 结果
     */
    public int insertPosDevice(PosDevice posDevice);

    /**
     * 修改POS设备
     * 
     * @param posDevice POS设备
     * @return 结果
     */
    public int updatePosDevice(PosDevice posDevice);

    /**
     * 批量删除POS设备
     * 
     * @param deviceIds 需要删除的POS设备主键集合
     * @return 结果
     */
    public int deletePosDeviceByDeviceIds(Long[] deviceIds);

    /**
     * 删除POS设备信息
     * 
     * @param deviceId POS设备主键
     * @return 结果
     */
    public int deletePosDeviceByDeviceId(Long deviceId);

    /**
     * 更新设备状态
     * 
     * @param deviceId 设备ID
     * @param status 状态
     * @return 结果
     */
    public int updatePosDeviceStatus(Long deviceId, String status);

    /**
     * 获取设备心跳信息
     * 
     * @param deviceId 设备ID
     * @return 心跳信息
     */
    public Object getDeviceHeartbeat(Long deviceId);

    /**
     * 更新设备配置
     * 
     * @param deviceId 设备ID
     * @param configData 配置数据
     * @return 结果
     */
    public int updateDeviceConfig(Long deviceId, Object configData);

    /**
     * 设备自动注册
     * 
     * @param request 注册请求
     * @return 注册响应
     */
    public DeviceAutoRegisterResponse autoRegisterDevice(DeviceAutoRegisterRequest request);

    /**
     * 发送调试指令到设备
     * 
     * @param request 调试指令请求
     * @return 结果
     */
    public boolean sendDebugCommand(DeviceDebugCommandRequest request);

    /**
     * 获取设备调试日志
     * 
     * @param deviceId 设备ID
     * @param query 查询条件
     * @return 调试日志列表
     */
    public List<DeviceDebugLogResponse> getDeviceDebugLogs(Long deviceId, DeviceDebugLogResponse query);

    /**
     * 清除设备调试日志
     * 
     * @param deviceId 设备ID
     * @return 结果
     */
    public int clearDeviceDebugLogs(Long deviceId);
}